public class code1s {
//    力扣 150 对称二叉树
public boolean isSymmetric(TreeNode root) {
    // 解法二：可以不使用递归进行解决
    // 可以通过一个队列来存储相关数据进行比较
    // 因为是比较左右两个树节点上的对应值是否相等，可以分别的将两边的值通过对称的形式添加到队列中进行判断
    // 定义一个方法实现比较函数
    // 这里直接将两颗树都得头结点都传递到这个方法中
    // 在这个方法中都是通过这个 头 节点分别向左右延伸进行判断的
    return chack(root, root);
}

    public boolean chack(TreeNode cur1, TreeNode cur2) {
        Queue<TreeNode> queue = new LinkedList<TreeNode>();

        // 首先现将两个节点添加到队列中
        queue.offer(cur1);
        queue.offer(cur2);

        // 通过 while 循环，将整棵树进行判断比较
        while(!queue.isEmpty()) {
            // 在后面会分别存储左右两边轴对称位置上的值
            // 所以每一次循环开始都将队列中的值取出来，跟新当前节点的信息
            cur1 = queue.poll();
            cur2 = queue.poll();

            // 判断两个节点的情况
            if(cur1 == null && cur2 == null) {
                // 此时表明两边都已经触底了
                // 此时跳过本次循环
                // 队列中一次会添加双方对应的两个节点，一对节点为 null 还会跳出循环判断下一对节点，不会直接结束循环
                continue;
            }
            if((cur1 == null || cur2 == null) || (cur1.val != cur2.val)) {
                // 此时说明不对称，直接返回 false
                return false;
            }

            // 在队列中添加上一对对称的元素
            queue.offer(cur1.left);
            queue.offer(cur2.right);

            // 在队列中添加上另外一对对称的元素
            queue.offer(cur1.right);
            queue.offer(cur2.left);
        }
        return true;
    }
}
